using GameStateManagement;
using Microsoft.Xna.Framework;
using SuperRyoninRPG.Controller;

namespace SuperRyoninRPG
{
	/// <summary>
	///     メニュー画面、ローディング画面、ゲーム自体、およびポーズ メニューとの
	///     間の移行を伴う、さまざまなゲーム状態を管理する方法を
	///     示すサンプル。このメインのゲーム クラスはきわめて単純です。
	///     すべての興味深い要素が ScreenManager コンポーネント内で実行されます。
	/// </summary>
	public class Game : Microsoft.Xna.Framework.Game
	{
		#region Fields

		private static readonly string[] PreloadAssets =
		{
			"gradient"
		};

		private readonly GraphicsDeviceManager graphics;
		public GraphicsDeviceManager Graphics{get { return graphics; }
		}
		private ScreenManager screenManager;

		// UI レンダリングで使用されるすべてのアセットをプリロードすることで、
		// メニュー遷移の途中で急に読み込むことが必要になったために
		// フレームレートが不自然になることを防ぎます。

		#endregion

		#region Initialization

		/// <summary>
		///     メインのゲーム コンストラクター。
		/// </summary>
		public Game()
		{
			this.Content.RootDirectory = "Content";

			this.graphics = new GraphicsDeviceManager(this);
			//graphics.PreferredBackBufferWidth = 853;
			//graphics.PreferredBackBufferHeight = 480;
			this.graphics.PreferredBackBufferWidth = 85;
			this.graphics.PreferredBackBufferHeight = 48;

			// 画面マネージャー コンポーネントを作成します。
			this.screenManager = new ScreenManager(this);

			this.Components.Add(this.screenManager);

			// 最初の画面をアクティブ化します。
			this.screenManager.AddScreen(new BackgroundScreen(), null);
			this.screenManager.AddScreen(new MainMenuScreen(), null);

			Accelerometer.Initialize();
		}

		/// <summary>
		///     グラフィック コンテンツを読み込みます。
		/// </summary>
		protected override void LoadContent()
		{
			foreach (string asset in PreloadAssets)
			{
				this.Content.Load<object>(asset);
			}
		}

		#endregion

		#region Draw

		/// <summary>
		///     これは、ゲーム自体が描画するときに呼び出されます。
		/// </summary>
		protected override void Draw(GameTime gameTime)
		{
			this.graphics.GraphicsDevice.Clear(Color.Black);

			// 実際の描画は、画面マネージャー コンポーネント内で実行されます。
			base.Draw(gameTime);
		}

		#endregion
	}
}